home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_2
/
processo.tar
/
processor.2
< prev
next >
Wrap
Text File
|
1990-02-26
|
34KB
|
1,425 lines
HP28S PROCESSOR INSTRUCTION SET Version 1
Copyright (C) 1989, Alonzo Gariepy
================================================================
==============================
==============================
== ==
== INSTRUCTIONS BY NUMBER ==
== ==
==============================
==============================
Here is a list of HP28 opcodes in numerical order. While the
separation lines help in navigation, their primary purpose is
to delimit the scope of each set of substitution tables.
________________________________________________________________
00 RETSETXM
01 RET
02 RETSETC
03 RETCLRC
04 SETHEX
05 SETDEC
06 PUSH.A C ***
07 POP.A C ***
08 CLR.X ST ***
09 MOVE.X ST,C ***
0A MOVE.X C,ST ***
0B SWAP.X C,ST ***
0C INC.1 P ***
0D DEC.1 P ***
________________________________________________________________
0Exy AND.f s,d
0Exz OR.f s,d
x | f y z | s d
------- -----------
0 | P 0 8 | B A
1 | WP 1 9 | C B
2 | XS 2 A | A C
3 | X 3 B | C D
4 | S 4 C | A B
5 | M 5 D | B C
6 | B 6 E | C A
7 | W 7 F | D C
F | A
________________________________________________________________
0F RETI
________________________________________________________________
10j MOVE.W A,Rn ***
10k MOVE.W C,Rn ***
11j MOVE.W Rn,A ***
11k MOVE.W Rn,C ***
12j SWAP.W A,Rn ***
12k SWAP.W C,Rn ***
j k | Rn
----------
0 8 | R0
1 9 | R1
2 A | R2
3 B | R3
4 C | R4
________________________________________________________________
13w MOVE.A s,Dn ***
13x SWAP.A s,Dn ***
13y MOVE.4 s,Dn
13z SWAP.4 s,Dn
w x y z | s Dn
----------------
0 2 8 A | A D0
1 3 9 B | A D1
4 6 C E | C D0
5 7 D F | C D1
________________________________________________________________
14x MOVE.A s,d
14y MOVE.B s,d
15xt MOVE.f s,d
15yi MOVE.n s,d ; n = i + 1
x y | s d t | f
--------------- -------
0 8 | A @D0 0 | P
1 9 | A @D1 1 | WP
2 A | @D0 A 2 | XS
3 B | @D1 A 3 | X
4 C | C @D0 4 | S
5 D | C @D1 5 | M
6 E | @D0 C 6 | B
7 F | @D1 C 7 | W
________________________________________________________________
16x ADD.A x+1,D0 ***
17x ADD.A x+1,D1 ***
18x SUB.A x+1,D0 ***
19xx MOVE.2 xx,D0
1Axxxx MOVE.4 xxxx,D0
1Bxxxxx MOVE.5 xxxxx,D0
1Cx SUB.A x+1,D1 ***
1Dxx MOVE.2 xx,D1
1Exxxx MOVE.4 xxxx,D1
1Fxxxxx MOVE.5 xxxxx,D1
2x MOVE.1 x,P ***
3ix...x MOVE.Pn x...x,C ; n = i + 1
________________________________________________________________
4xx BRCS PC+1+xx
420 NOP3
5xx BRCC PC+1+xx
6xxx JUMP.3 PC+1+xxx ***
6300 NOP4
64000 NOP5
7xxx CALL.3 PC+4+xxx ***
________________________________________________________________
800 OUT.S C
801 OUT.X C
802 IN.4 A ***
803 IN.4 C ***
804 UNCNFG
805 CONFIG
806 MOVE.A ID,C
807 SHUTDN
8080 INTON
80810 RSI
8082ix...x MOVE.Pn x...x,A ; n = i + 1
8083 BUSCB
8084x CLRB x,A
8085x SETB x,A
8086xyy BRBC x,A,PC+5+yy
8087xyy BRBS x,A,PC+5+yy
8088x CLRB x,C
8089x SETB x,C
808Axyy BRBC x,C,PC+5+yy
808Bxyy BRBS x,C,PC+5+yy
808C JUMP.A @A ***
808C MOVE.A @A,PC ***
808D BUSCD
808E JUMP.A @C ***
808E MOVE.A @C,PC ***
808F INTOFF
809 ADD.A P+1,C
80A RESET
80B BUSCC
80Cx MOVE.1 P,C,x ***
80Dx MOVE.1 C,x,P ***
80E SREQ
80Fx SWAP.1 P,C,x ***
________________________________________________________________
81w RLN.W d
81x RRN.W d
818twi ADD.f i+1,d
818tyi SUB.f i+1,d
819tw SRB.f d
81At0j MOVE.f A,Rn
81At0k MOVE.f C,Rn
81At1j MOVE.f Rn,A
81At1k MOVE.f Rn,C
81At2j SWAP.f A,Rn
81At2k SWAP.f C,Rn
81z SRB.W d
t | f w x y z | d j k | Rn
------- ------------- ----------
0 | P 0 4 8 C | A 0 8 | R0
1 | WP 1 5 9 D | B 1 9 | R1
2 | XS 2 6 A E | C 2 A | R2
3 | X 3 7 B F | D 3 B | R3
4 | S 4 C | R4
5 | M
6 | B
7 | W
F | A
________________________________________________________________
81B2 JUMP.A A ***
81B2 MOVE.A A,PC ***
81B3 JUMP.A C ***
81B3 MOVE.A C,PC ***
81B4 MOVE.A PC,A ***
81B5 MOVE.A PC,C ***
81B6 SWAP.A A,PC ***
81B7 SWAP.A C,PC ***
________________________________________________________________
82x CLRB d*
83xyy BRBC d,PC+3+yy
x | d
--------
1 | XM
2 | SB
4 | SR
8 | MP
________________________________________________________________
84x CLRB x,ST
85x SETB x,ST
86xyy BRBC x,ST,PC+3+yy
87xyy BRBS x,ST,PC+3+yy
88xyy BRNE.1 P,x,PC+3+yy ***
89xyy BREQ.1 P,x,PC+3+yy ***
________________________________________________________________
ttuyy BREQ.f s,d,PC+3+yy
ttvyy BRNE.f s,d,PC+3+yy
ttwyy BRZ.f s,PC+3+yy
ttxyy BRNZ.f s,PC+3+yy
zzuyy BRGT.f s,d,PC+3+yy
zzvyy BRLT.f s,d,PC+3+yy
zzwyy BRGE.f s,d,PC+3+yy
zzxyy BRLE.f s,d,PC+3+yy
tt zz | f u v w x | s d
----------- ---------------
8A 8B | A 0 4 8 C | A B
90 98 | P 1 5 9 D | B C
91 99 | WP 2 6 A E | C A
92 9A | XS 3 7 B F | D C
93 9B | X
94 9C | S
95 9D | M
96 9E | B
97 9F | W
________________________________________________________________
8Cxxxx JUMP.4 PC+2+xxxx
8Dxxxxx JUMP.A xxxxx
8Exxxx CALL.4 PC+6+xxxx
8Fxxxxx CALL.A xxxxx
________________________________________________________________
kkx ADD.f s,d
kkw DEC.f d
ppt CLR.f d
ppz MOVE.f s,d
ppw SWAP.f s,d
qqy SUB.f s,d
qqu INC.f d
qqw SUBN.f s,d
rrt SLN.f d
rru SRN.f d
rrv NEG.f d
rrw NOT.f d
kk pp qq rr | f t u v w x y z | s d
----------------- ---------------------
A0 A8 B0 B8 | P 0 4 8 C 0 0 4 | B A
A1 A9 B1 B9 | WP 1 5 9 D 1 1 5 | C B
A2 AA B2 BA | XS 2 6 A E 2 2 6 | A C
A3 AB B3 BB | X 3 7 B F 3 3 7 | C D
A4 AC B4 BC | S 4 | A A
A5 AD B5 BD | M 5 | B B
A6 AE B6 BE | B 6 | C C
A7 AF B7 BF | W 7 | D D
C D E F | A 8 8 8 | A B
9 9 9 | B C
A A A | C A
B B B | D C
================================================================
================================================
================================================
== ==
== INSTRUCTIONS WITH DEFAULT FIELD SUFFIXES ==
== ==
================================================
================================================
Here is a summary of all instructions in which you may omit the
field suffix after the name. These instructions are marked with
*** in the numeric and alphabetic listings. This summary uses
the following abbreviations: ac = A or C; Dn = D0 or D1; Rn =
R0, R1, R2, R3, or R4. These are the only instructions in which
you can omit the field suffix:
________________________________________________________________
.A Instructions that reference D0, D1, PC, or RSTK use
the Address Field by default when you omit the .A
suffix:
PUSH C
POP C
MOVE ac,Dn
SWAP ac,Dn
ADD const,Dn
SUB const,Dn
JUMP @ac
MOVE @ac,PC
JUMP ac
MOVE ac,PC
MOVE PC,ac
SWAP ac,PC
________________________________________________________________
.1 Instructions that reference P use a one nibble field by
default when you omit the .1 suffix:
BREQ P,x,PC+3+offset
BRNE P,x,PC+3+offset
DEC P
INC P
MOVE x,P
MOVE P,C,i
MOVE C,i,P
RETEQ P,x
RETNE P,x
SWAP P,C,i
________________________________________________________________
.W Instructions that reference the temporary registers use
the entire word by default when you omit the .W suffix:
MOVE ac,Rn
MOVE Rn,ac
SWAP ac,Rn
________________________________________________________________
.3 You can omit the .3 suffix from relative JUMP and CALL
instructions that use three nibble offsets:
JUMP PC+1+offset
CALL PC+4+offset
________________________________________________________________
.X Instructions that reference ST use a three nibble field
by default so you can omit the .X suffix:
CLR ST
MOVE C,ST
MOVE ST,C
SWAP C,ST
________________________________________________________________
.4 The IN instruction only uses a four nibble field so you
can omit the .4 suffix:
IN ac
________________________________________________________________
Here is a list of all the instructions that never take a suffix:
BRBC BUSCD NOP4 RETCC SETB
BRBS CLRB NOP5 RETCLRC SETDEC
BRCC CONFIG RESET RETCS SETHEX
BRCS INTOFF RET RETSETC SHUTDN
BUSCB INTON RETBC RETSETXM SREQ
BUSCC NOP3 RETBS RSI UNCNFG
________________________________________________________________
ALL OTHER INSTRUCTIONS REQUIRE A FIELD SUFFIX.
The following instructions are similar to ones above
but do require a field suffix:
ADD.A P+1,C
OUT.S C
OUT.X C
MOVE.2 const,Dn
MOVE.4 const,Dn
MOVE.5 const,Dn
MOVE.4 ac,Dn
JUMP.4 PC+2+offset
CALL.4 PC+2+offset
CALL.A const
================================================================
============================
============================
== ==
== INSTRUCTIONS BY TYPE ==
== ==
============================
============================
================================================================
ADD
================================================================
ADD Register to Register
kkx ADD.f s,d
kk | f x | s d
-------- ---------
A0 | P 0 | B A
A1 | WP 1 | C B
A2 | XS 2 | A C
A3 | X 3 | C D
A4 | S 4 | A A
A5 | M 5 | B B
A6 | B 6 | C C
A7 | W 7 | D D
C | A 8 | A B
9 | B C
A | C A
B | D C
Examples:
C8 ADD.A A,B ; B = B + A (20 bits)
A70 ADD.W B,A ; A = A + B (64 bits)
A36 ADD.X C,C ; C = C + C (12 bits)
________________________________________________________________
ADD Constant to Register
"The 818... opcodes don't always work as advertised.
To be specific, when the field of such an instruction
is XS, S, P, or WP, and a carry (or borrow) is generated
out of the most significant nibble, it wraps around and
affects the least significant nibble." -- D.K.
818twi ADD.f i+1,d
t | f x | d
------- -------
0 | P 0 | A
1 | WP 1 | B
2 | XS 2 | C
3 | X 3 | D
4 | S
5 | M
6 | B
7 | W
F | A
Examples:
818718 ADD.W 9,B ; B = B + 9 (64 bits)
81860F ADD.B 16,A ; A = A + 16 (8 bits)
________________________________________________________________
ADD Constant to Address Register
These instructions let you add a constant from 1 to 16
to the contents of registers D0 or D1.
16x ADD.A x+1,D0 ***
17x ADD.A x+1,D1 ***
Examples:
164 ADD 5,D0 ; D0 = D0 + 5 (20 bits)
17E ADD 15,D1 ; D1 = D1 + 15 (20 bits)
________________________________________________________________
ADD Pointer+1 to Register
809 ADD.A P+1,C
Examples:
809 ADD.A P+1,C ; C = C + P + 1 (20 bits)
================================================================
AND
================================================================
AND Register to Register
0Exy AND.f s,d
x | f y | s d
------- ---------
0 | P 0 | B A
1 | WP 1 | C B
2 | XS 2 | A C
3 | X 3 | C D
4 | S 4 | A B
5 | M 5 | B C
6 | B 6 | C A
7 | W 7 | D C
F | A
Examples:
0E63 AND.B C,D ; D = D & C (8 bits)
0EF5 AND.A B,C ; C = C & B (20 bits)
================================================================
BRANCH and RETURN
================================================================
These instructions branch or return when an associated test
evaluates true. The destination of the branch is the sum of
an 8 bit sign extended 2's complement offset and the address
of that offset. When the offset is 00, the destination is
reached by popping an address off the return stack.
In the following, the destination argument is expressed relative
to the address of the instruction (designated PC). In the case
of a return, this argument can be omitted and the BR in the
mnemonic substituted with RET.
________________________________________________________________
Branch/Return Bit Clear
Branch/Return Bit Set
These instructions branch/return depending on whether the
specified bit in a register is 0 or 1.
8086xyy BRBC x,A,PC+5+yy
808Axyy BRBC x,C,PC+5+yy
83zyy BRBC hf,PC+3+yy
86xyy BRBC x,ST,PC+3+yy
8087xyy BRBS x,A,PC+5+yy
808Bxyy BRBS x,C,PC+5+yy
87xyy BRBS x,ST,PC+3+yy
z | hf
--------
1 | XM
2 | SB
4 | SR
8 | MP
Examples:
808B900 RETBS 9,C ; return if bit 9 of C is set
8765F BRBS 6,ST,PC-8 ; jump 8 nibbles before instruction
; if bit 6 of ST is set
8086E02 BRBC 14,A,PC+37 ; jump 37 nibbles from instruction
; if bit 14 of A is clear
83400 RETC SR ; return if Service Request clear
8380F BRBC MP,PC-13 ; jump -13 if Module Pulled clear
________________________________________________________________
Branch/Return Carry Clear
Branch/Return Carry Set
These instructions branch/return depending on whether the
carry flag is clear or set.
5xx BRCC PC+1+xx
4xx BRCS PC+1+xx
Examples:
500 RETCC ; return if carry clear
45F BRCS PC-10 ; branch -10 nibbles if carry set
550 BRCC PC+6 ; branch +6 nibbles if carry clear
________________________________________________________________
Branch/Return Pointer Equal
Branch/Return Pointer Not Equal
These instructions branch/return depending on whether the
4 bit register P is equal/not equal to a 4 bit constant.
89xyy BREQ.1 P,x,PC+3+yy ***
88xyy BRNE.1 P,x,PC+3+yy ***
Examples:
89C31 BREQ P,12,PC+22 ; branch +22 if P equals 12
88500 RETNE P,5 ; return if P not equal to 5
________________________________________________________________
Branch/Return Register Inequality
These instructions branch/return depending on the result
of an inequality between the fields of two registers.
ttuyy BREQ.f s,d,PC+3+yy
ttvyy BRNE.f s,d,PC+3+yy
ttwyy BRZ.f s,PC+3+yy
ttxyy BRNZ.f s,PC+3+yy
zzuyy BRGT.f s,d,PC+3+yy
zzvyy BRLT.f s,d,PC+3+yy
zzwyy BRGE.f s,d,PC+3+yy
zzxyy BRLE.f s,d,PC+3+yy
tt zz | f u v w x | s d
----------- ---------------
8A 8B | A 0 4 8 C | A B
90 98 | P 1 5 9 D | B C
91 99 | WP 2 6 A E | C A
92 9A | XS 3 7 B F | D C
93 9B | X
94 9C | S
95 9D | M
96 9E | B
97 9F | W
Examples:
8B500 RETLT.A B,C ; return if B < C (20 bits)
93BD0 BRZ.X D,PC+16 ; branch +16 if D is zero (12 bits)
9FA00 RETGE.W C,A ; return if C >= A (64 bits)
================================================================
BUS COMMANDS
================================================================
8083 BUSCB
80B BUSCC
808D BUSCD
804 UNCNFG ; unconfig all chips
805 CONFIG ; config next chip
806 MOVE.A ID,C ; get ID of current chip
807 SHUTDN ; shutdown bus, stop cpu
80A RESET ; bus reset, resets chips
80E SREQ ; check for service request
================================================================
CALL
================================================================
Call Subroutine Relative
Unlike the BR and relative JUMP commands, relative CALLs
contain an offset from the next instruction. In the
following these are expressed relative to the address of
the CALL instruction itself (PC). Offsets are in stored
in 2's complement form.
7xxx CALL.3 PC+4+xxx ***
8Exxxx CALL.4 PC+6+xxxx
Examples:
7040 CALL PC+68 ; call 68 nibbles from this instruction
8E020E CALL.4 PC-8154 ; call 8154 nibbles back from insruction
________________________________________________________________
Call Subroutine Absolute
8Fxxxxx CALL.A xxxxx
Examples:
8F0200C CALL.A #C0020 ; call to absolute address #C0020h
================================================================
CLEAR
================================================================
Clear Field of Register
ppt CLR.f d
pp | f t| d
-------- ------
A8 | P 0| A
A9 | WP 1| B
AA | XS 2| C
AB | X 3| D
AC | S
AD | M
AE | B
AF | W
D | A
Examples:
D2 CLR.A C ; clear address field of C (20 bits)
A83 CLR.P D ; clear nibble of D pointed to by P
AF0 CLR.W A ; clear all of A (64 bits)
________________________________________________________________
Clear Bit
8084x CLRB x,A
8088x CLRB x,C
84x CLRB x,ST
Examples:
8084D CLRB 13,A ; clear bit 13 of register A
80880 CLRB 0,C ; clear bit 0 of register C
847 CLRB 7,ST ; clear bit 7 of ST
________________________________________________________________
Clear Hardware Status Flag(s)
The bits 1,2,4, and 8 can be ORed together to clear
more than one hardware status flag at a time.
82x CLRB d*
x | d
--------
1 | XM
2 | SB
4 | SR
8 | MP
Examples:
825 CLR XM,SR
822 CLR SB
________________________________________________________________
Clear Bits 0-11 of ST
08 CLR.X ST ***
================================================================
DECREMENT
================================================================
Decrement register one unit. Adjust carry.
0D DEC.1 P ***
kkw DEC.f d
kk | f w | d
-------- -------
A0 | P C | A
A1 | WP D | B
A2 | XS E | C
A3 | X F | D
A4 | S
A5 | M
A6 | B
A7 | W
C | A
Examples:
0D DEC P ; P = P - 1 (4 bits)
A3D DEC.X B ; B = B - 1 (12 bits)
================================================================
IN
================================================================
Copy IN register to register A or C
802 IN.4 A ***
803 IN.4 C ***
================================================================
INCREMENT
================================================================
Increment register one unit. Adjust carry.
0C INC.1 P ***
qqu INC.f d
qq | f u | d
-------- -------
B0 | P 4 | A
B1 | WP 5 | B
B2 | XS 6 | C
B3 | X 7 | D
B4 | S
B5 | M
B6 | B
B7 | W
E | A
Examples:
0C INC P ; P = P - 1 (4 bits)
B77 INC.W D ; D = D - 1 (64 bits)
================================================================
INTERRUPT COMMANDS
================================================================
808F INTOFF
8080 INTON
80810 RSI
================================================================
JUMP
================================================================
JUMP Relative
The JUMP command takes a 2's complement offset relative
to the address of the offset, stored with the least
signficant bit first. In the following, the destination
is expressed relative to the address of the JUMP instruction.
6xxx JUMP.3 PC+1+xxx ***
8Cxxxx JUMP.4 PC+2+xxxx
Examples:
6C10 JUMP PC+29
6C1F JUMP PC-227
8C1001 JUMP.4 PC+4099
________________________________________________________________
Jump Absolute
8Dxxxxx JUMP.A xxxxx
________________________________________________________________
Jump Register Indirect
These opcodes are useful for implementing the threaded
RPL interpreter of the HP28S. They can be expressed
either as MOVE or JUMP instructions. The effect is to
set the PC to the address pointed at by the address
pointed at by the register.
808C JUMP.A @A ***
808C MOVE.A @A,PC ***
808E JUMP.A @C ***
808E MOVE.A @C,PC ***
________________________________________________________________
Jump Register Direct
Opcodes 81B2 and 81B3 can be expressed either as MOVE
or JUMP instructions. The SWAP instructions might be
useful for implementing coroutines.
81B2 JUMP.A A ***
81B2 MOVE.A A,PC ***
81B3 JUMP.A C ***
81B3 MOVE.A C,PC ***
81B6 SWAP.A A,PC ***
81B7 SWAP.A C,PC ***
================================================================
MOVE
================================================================
There are so many MOVE instructions that it might make sense to
distinguish them with their own names, but there is also virtue
in limiting the number of mnemonics one must remember.
________________________________________________________________
MOVE Register to Register
ppz MOVE.f s,d
pp | f z | s d
-------- ---------
A8 | P 4 | B A
A9 | WP 5 | C B
AA | XS 6 | A C
AB | X 7 | C D
AC | S 8 | A B
AD | M 9 | B C
AE | B A | C A
AF | W B | D C
D | A
Examples:
D9 MOVE.A B,C ; C gets B (20 bits)
AE4 MOVE.B B,A ; A gets B (8 bits)
AFB MOVE.W D,C ; C gets D (64 bits)
________________________________________________________________
MOVE Memory to Register
MOVE Register to Memory
These instructions move between memory and registers A
or C by indirecting through address registers D0 or D1.
14x MOVE.A s,d
14y MOVE.B s,d
15xt MOVE.f s,d
15yi MOVE.n s,d ; n = i + 1
x y | s d t | f
-------------- -------
0 8 | A @D0 0 | P
1 9 | A @D1 1 | WP
2 A | @D0 A 2 | XS
3 B | @D1 A 3 | X
4 C | C @D0 4 | S
5 D | C @D1 5 | M
6 E | @D0 C 6 | B
7 F | @D1 C 7 | W
Examples:
142 MOVE.A @D0,A ; A gets 20 bits stored at D0
15D6 MOVE.7 C,@D1 ; Store 28 bits of C at D1
1577 MOVE.W @D1,C ; C gets 64 bits stored at D1
149 MOVE.B A,@D1 ; Store one byte of A at D1
1516 MOVE.B A,@D1 ; Store one byte of A at D1
1591 MOVE.2 A,@D1 ; Store one byte of A at D1
________________________________________________________________
MOVE Register to Address Register
13w MOVE.A s,Da ***
13y MOVE.4 s,Da
w y | s Da
-----------
0 8 | A D0
1 9 | A D1
4 C | C D0
5 D | C D1
Examples:
131 MOVE A,D1 ; D1 gets A (20 bits)
13C MOVE.4 C,D0 ; D0 gets C (16 bits)
________________________________________________________________
MOVE Register to Temporary Register
MOVE Temporary Register to Register
10j MOVE.W A,Rn ***
10k MOVE.W C,Rn ***
11j MOVE.W Rn,A ***
11k MOVE.W Rn,C ***
81At0j MOVE.f A,Rn
81At0k MOVE.f C,Rn
81At1j MOVE.f Rn,A
81At1k MOVE.f Rn,C
81At2j SWAP.f A,Rn
81At2k SWAP.f C,Rn
t | f j k | Rn
------- ----------
0 | P 0 8 | R0
1 | WP 1 9 | R1
2 | XS 2 A | R2
3 | X 3 B | R3
4 | S 4 C | R4
5 | M
6 | B
7 | W
F | A
Examples:
100 MOVE A,R0 ; R0 gets A (64 bits)
11C MOVE R4,C ; C gets R4 (64 bits)
81A71C MOVE.W R4,C ; C gets R4 (64 bits)
81A309 MOVE.X C,R1 ; R1 gets C (12 bits)
________________________________________________________________
MOVE Register to PC
MOVE PC to Register
Opcodes 81B2 and 81B3 can be expressed either as MOVE
or JUMP instructions.
81B2 MOVE.A A,PC ***
81B3 MOVE.A C,PC ***
81B4 MOVE.A PC,A ***
81B5 MOVE.A PC,C ***
________________________________________________________________
MOVE Register Indirect to PC
These opcodes are useful for implementing the threaded
RPL interpreter of the HP28S. They can be expressed
either as MOVE or JUMP instructions. The effect is to
set the PC to the address pointed at by the address
pointed at by the register.
808C MOVE.A @A,PC ***
808E MOVE.A @C,PC ***
________________________________________________________________
MOVE Constant to Register
These instructions move a variable length constant from
the instruction stream into registers A or C beginning
with the nibble pointed to by register P. This results
in a unique field type, Pn, where P designates the position
where the constant will be moved and n the size of the
constant in nibbles.
3ix...x MOVE.Pn x...x,C ; n = i + 1
8082ix...x MOVE.Pn x...x,A ; n = i + 1
Examples:
34910C0 MOVE.P5 #C019,C
32310 MOVE.P3 19,C
808234000 MOVE.P4 4,A
________________________________________________________________
MOVE Constant to Address Register
19xx MOVE.2 xx,D0
1Axxxx MOVE.4 xxxx,D0
1Bxxxxx MOVE.5 xxxxx,D0
1Dxx MOVE.2 xx,D1
1Exxxx MOVE.4 xxxx,D1
1Fxxxxx MOVE.5 xxxxx,D1
Examples:
1940 MOVE.2 4,D0 ; D0 gets 4 (8 bits)
1E1234 MOVE.4 #4321,D1 ; D1 get #4321h (16 bits)
1B12340 MOVE.5 #4321,D0 ; D0 gets #04321h (20 bits)
________________________________________________________________
MOVE Constant to Pointer Register
2x MOVE.1 x,P ***
Examples:
27 MOVE 7,P ; P points to nibble 7
2C MOVE 12,P ; P points to nibble 12
________________________________________________________________
MOVE Pointer Register to Register Nibble
MOVE Register Nibble to Pointer Register
Move 4 bit P register value to or from the specified
nibble (x) of regiester C.
80Cx MOVE.1 P,C,x ***
80Dx MOVE.1 C,x,P ***
Examples:
80C0 MOVE P,C,0 ; nibble 0 of C gets P (4 bits)
80D7 MOVE C,7,P ; P gets nibble 7 of C (4 bits)
________________________________________________________________
MOVE Register to Status Register
MOVE Status Register to Register
09 MOVE.X ST,C ***
0A MOVE.X C,ST ***
================================================================
NEGATE
================================================================
Negate Register (2's complement)
rrv NEG.f d
rr | f v | d
-------- -------
B8 | P 8 | A
B9 | WP 9 | B
BA | XS A | C
BB | X B | D
BC | S
BD | M
BE | B
BF | W
F | A
Examples:
FA NEG.A C ; C = -C (20 bits)
BEB NEG.B D ; D = -D (8 bits)
================================================================
NO OPERATION
================================================================
NOP
These instructions do nothing.
420 NOP3
6300 NOP4
64000 NOP5
================================================================
NOT
================================================================
Invert Register (1's complement)
rrw NOT.f d
rr | f w | d
-------- -------
B8 | P C | A
B9 | WP D | B
BA | XS E | C
BB | X F | D
BC | S
BD | M
BE | B
BF | W
F | A
Examples:
BCE NOT.S C ; invert nibble 15 of C (4 bits)
FF NOT.A D ; invert D (20 bits)
================================================================
OR
================================================================
OR Register to Register
0Exz OR.f s,d
x | f z | s d
------- ---------
0 | P 8 | B A
1 | WP 9 | C B
2 | XS A | A C
3 | X B | C D
4 | S C | A B
5 | M D | B C
6 | B E | C A
7 | W F | D C
F | A
Examples:
0E6C OR.B A,B ; B = B & A (8 bits)
0EFF OR.A D,C ; C = C & D (20 bits)
================================================================
OUT
================================================================
Copy OUT register to register A or C
800 OUT.S C
801 OUT.X C
================================================================
POP
================================================================
POP Address from Stack
07 POP.A C ***
================================================================
PUSH
================================================================
PUSH Address onto Stack
06 PUSH.A C ***
================================================================
RETURN
================================================================
Return from Subroutine, popping return address from stack
01 RET ; return
02 RETSETC ; set carry and return
03 RETCLRC ; clear carry and return
0F RETI ; enable int and return
00 RETSETXM ; set XM flag and return
________________________________________________________________
Conditional Return
See BRANCH. Branch instructions function as conditional
returns when their destination offset is zero.
================================================================
ROTATE
================================================================
Rotate Left nibble
Rotate Right nibble
The SB flag is set when a non-zero nibble is shifted
from postion 0 to 15 (RRN only).
81w RLN.W d
81x RRN.W d
w x | d
---------
0 4 | A
1 5 | B
2 6 | C
3 7 | D
Examples:
810 RLN.W A ; rotate A one nibble left
816 RRN.W C ; rotate C one nibble right
================================================================
SET
================================================================
Set Bit
8085x SETB x,A
8089x SETB x,C
85x SETB x,ST
Examples:
8085D SETB 13,A ; clear bit 13 of register A
80890 SETB 0,C ; clear bit 0 of register C
857 SETB 7,ST ; clear bit 7 of ST
________________________________________________________________
Set Decimal
Set Hexadecimal
Sets the CPU to do register arithmetic in HEX (binary) or
DEC (binary coded decimal) mode.
05 SETDEC
04 SETHEX
================================================================
SHIFT
================================================================
Shift Left nibble
Shift Right nibble
Shift Right Bit
The SB flag is set when a non-zero nibble/bit is shifted
out of position 0 (SRN/SRB only). Zeros shifted in.
rrw SLN.f d
rrx SRN.f d
819tw SRB.f d
81z SRB.W d
rr t | f w x z | d
----------- -----------
B8 0 | P 0 4 C | A
B9 1 | WP 1 5 D | B
BA 2 | XS 2 6 E | C
BB 3 | X 3 7 F | D
BC 4 | S
BD 5 | M
BE 6 | B
BF 7 | W
F F | A
Examples:
F3 SLN.A D ; shift D left one nibble (20 bits)
BE6 SRN.B C ; shift C right one nibble (8 bits)
81931 SRB.X B ; shift B right one bit (12 bits)
================================================================
SUB
================================================================
Subtract Register from Register
The SUBN instruction stores the negative of the
subtraction in the destination.
qqy SUB.f s,d
qqw SUBN.f s,d
qq | f y w | s d
-------- -----------
B0 | P 0 C | B A
B1 | WP 1 D | C B
B2 | XS 2 E | A C
B3 | X 3 F | C D
B4 | S 8 | A B
B5 | M 9 | B C
B6 | B A | C A
B7 | W B | D C
E | A
Examples:
E2 SUB.A A,C ; C = C - A (20 bits)
EE SUBN.A A,C ; C = - (C - A) = A - C (20 bits)
B70 SUB.W B,A ; A = A - B (64 bits)
________________________________________________________________
Subtract Constant from Register
"The 818... opcodes don't always work as advertised.
To be specific, when the field of such an instruction
is XS, S, P, or WP, and a carry (or borrow) is generated
out of the most significant nibble, it wraps around and
affects the least significant nibble." -- D.K.
818tyi SUB.f i+1,d
t | f y | d
------- -------
0 | P 8 | A
1 | WP 9 | B
2 | XS A | C
3 | X B | D
4 | S
5 | M
6 | B
7 | W
F | A
Examples:
818594 SUB.M 5,B ; B = B - 5 (48 bits)
8186BD SUB.B 14,D ; D = D - 14 (8 bits)
________________________________________________________________
Subtract Constant from Address Register
18x SUB.A x+1,D0 ***
1Cx SUB.A x+1,D1 ***
Examples:
184 SUB 5,D0 ; D0 = D0 - 5 (20 bits)
1C9 SUB 10,D1 ; D1 = D1 - 10 (20 bits)
================================================================
SWAP
================================================================
SWAP Register with Register
ppw SWAP.f s,d
pp | f w | s d
-------- ---------
A8 | P C | B A
A9 | WP D | C B
AA | XS E | A C
AB | X F | C D
AC | S
AD | M
AE | B
AF | W
D | A
Examples:
DF SWAP.A C,D ; interchange values of C and D
ABC SWAP.X A,B ; interchange low 3 nibbles of A and B
________________________________________________________________
SWAP Register with Address Register
13x SWAP.A s,Da ***
13z SWAP.4 s,Da
x z | s Da
------------
2 A | A D0
3 B | A D1
6 E | C D0
7 F | C D1
Examples:
137 SWAP C,D1 ; interchange low 20 bits of C and D1
13A SWAP.4 A,D0 ; interchange low 16 bits of A and D0
________________________________________________________________
SWAP Register with Temporary Register
12j SWAP.W A,Rn ***
12k SWAP.W C,Rn ***
81At2j SWAP.f A,Rn
81At2k SWAP.f C,Rn
t | f j k | Rn
------- ----------
0 | P 0 8 | R0
1 | WP 1 9 | R1
2 | XS 2 A | R2
3 | X 3 B | R3
4 | S 4 C | R4
5 | M
6 | B
7 | W
F | A
Examples:
121 SWAP A,R1 ; interchange A with R1 (64 bits)
12B SWAP C,R3 ; interchange C with R3 (64 bits)
81AF24 SWAP.A A,R4 ; interchange A with R4 (20 bits)
________________________________________________________________
SWAP Register with PC
These operations have the effect of saving the PC of
the next instruction and transferring control to the
address contained in the register. This can be useful
for implementing coroutines.
81B6 SWAP.A A,PC ***
81B7 SWAP.A C,PC ***
________________________________________________________________
SWAP Register with Pointer Register
Swap 4 bit P register value with the high order nibble
of the specified field of register C.
80Fx SWAP.1 P,C,x ***
Examples:
80F0 SWAP P,C,0 ; interchange P with low nibble of C
80FF SWAP P,C,15 ; interchange P with high nibble of C
________________________________________________________________
SWAP Register with Status Register
0B SWAP.X C,ST ***
================================================================